﻿/*************************************************
版权所有(C), 2012, 广州新昊网络科技有限公司
文件名称： Transformer.cs 
作者: 卢盛福
QQ：34885177
完成日期: 2012/10/27 14:49:01
环境版本：4.0.30319.239
主要内容:详细说明此程序文件完成的功能
-----------------第一次修改-----------------
修改作者：
QQ：
修改日期：
环境版本：
修改内容：
*************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Reflection;
using System.Data;

namespace CrazyTalk.Common
{
    ///<summary> 
    ///类名:Transformer		 
    ///作者:卢盛福	 
    ///QQ:34885177
    ///完成日期: 2012/10/27 14:49:01	 
    ///功能描述:Transformer实体类	
    /// -----------------第一次修改-----------------
    /// 修改作者:		
    ///QQ: 
    /// 修改日期:	
    /// 修改描述:		
    ///</summary>

    public class Transformer
    {
        /// <summary>
        /// DataTable装换为泛型集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="p_DataTable">The p_ data table.</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static List<T> DataTableToIList<T>(DataTable p_DataTable)
        {
            if (p_DataTable == null || p_DataTable.Rows.Count == 0)
                return null;

            DataTable p_Data = p_DataTable;
            // 返回值初始化 
            List<T> result = new List<T>();
            for (int j = 0; j < p_Data.Rows.Count; j++)
            {
                T _t = (T)Activator.CreateInstance(typeof(T));
                PropertyInfo[] propertys = _t.GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    for (int i = 0; i < p_Data.Columns.Count; i++)
                    {
                        // 属性与字段名称一致的进行赋值 
                        if (pi.Name.Equals(p_Data.Columns[i].ColumnName))
                        {
                            // 数据库NULL值单独处理 
                            if (p_Data.Rows[j][i] != DBNull.Value)
                            {
                                pi.SetValue(_t, p_Data.Rows[j][i], null);
                            }
                            else
                            {
                                if (p_Data.Rows[j]["GameName"].ToString() == "")
                                {
                                    pi.SetValue(_t, "吧游资讯", null);
                                }
                                else
                                {
                                    pi.SetValue(_t, null, null);
                                }
                            }
                            break;
                        }
                    }
                }
                result.Add(_t);
            }
            return result;
        }

        /// <summary>
        /// 将集合类转换成DataTable
        /// </summary>
        /// <param name="list">集合</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static DataTable ToDataTable(IList list)
        {
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    result.Columns.Add(pi.Name, pi.PropertyType);
                }

                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        object obj = pi.GetValue(list[i], null);
                        tempList.Add(obj);
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }
    }
}
